home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / components / flockSearchMigratable.js < prev    next >
Text File  |  2007-10-12  |  5KB  |  193 lines

  1. //
  2. // BEGIN FLOCK GPL
  3. // 
  4. // Copyright Flock Inc. 2005-2007
  5. // http://flock.com
  6. // 
  7. // This file may be used under the terms of of the
  8. // GNU General Public License Version 2 or later (the "GPL"),
  9. // http://www.gnu.org/licenses/gpl.html
  10. // 
  11. // Software distributed under the License is distributed on an "AS IS" basis,
  12. // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13. // for the specific language governing rights and limitations under the
  14. // License.
  15. // 
  16. // END FLOCK GPL
  17. //
  18.  
  19. const SM_CONTRACTID = '@flock.com/search-migratable;1';
  20. const SM_CLASSID    = Components.ID('{24ddbfe0-4216-40cb-a037-2c17ab7d5a47}');
  21. const SM_CLASSNAME  = 'Flock Search Service Migratable';
  22.  
  23. const SEARCHELSEWHERE_EXCLUSION_PREF  = "flock.search.excludedEngines";
  24.  
  25. const Cc = Components.classes;
  26. const Ci = Components.interfaces;
  27. const Cr = Components.results;
  28.  
  29.  
  30. function SearchMigratable() {
  31. }
  32.  
  33. SearchMigratable.prototype = {
  34.   get shortname() { return 'Search Preferences'; },
  35.  
  36.   needsMigration: function SM_needsMigration(oldVersion) {
  37.     if (oldVersion.substr(0, 3) == '0.7') {
  38.       var prefs = Cc['@mozilla.org/preferences-service;1']
  39.         .getService(Ci.nsIPrefBranch);
  40.       return prefs.prefHasUserValue(SEARCHELSEWHERE_EXCLUSION_PREF);
  41.     } else {
  42.       return false;
  43.     }
  44.   },
  45.   startMigration: function SM_startMigration(oldVersion, listener) {
  46.     var prefs = Cc['@mozilla.org/preferences-service;1']
  47.       .getService(Ci.nsIPrefBranch);
  48.     var excluded = prefs.getCharPref(SEARCHELSEWHERE_EXCLUSION_PREF);
  49.  
  50.     var engineMap = {};
  51.  
  52.     var searchService = Cc['@mozilla.org/browser/search-service;1'].
  53.       getService(Ci.nsIBrowserSearchService);
  54.     var engines = searchService.getEngines({});
  55.  
  56.     for each (engine in engines) {
  57.       engine = engine.wrappedJSObject;
  58.  
  59.       var engineFile;
  60.       if (engine._unconvertedFile)
  61.         engineFile = engine._unconvertedFile;
  62.       else
  63.         engineFile = engine._file;
  64.  
  65.       engineMap[engineFile.leafName] = engine.name;
  66.     }
  67.  
  68.     var ctxt = {
  69.       listener: listener,
  70.  
  71.       engineMap: engineMap,
  72.  
  73.       oldExcluded: excluded.split(','),
  74.       newExcluded: []
  75.     };
  76.  
  77.     return { wrappedJSObject: ctxt };
  78.   },
  79.   finishMigration: function SM_finishMigration(ctxtWrapper) {
  80.     var ctxt = ctxtWrapper.wrappedJSObject;
  81.  
  82.     var prefs = Cc['@mozilla.org/preferences-service;1']
  83.       .getService(Ci.nsIPrefBranch);
  84.     prefs.setCharPref(SEARCHELSEWHERE_EXCLUSION_PREF, ctxt.newExcluded.join());
  85.   },
  86.   doMigrationWork: function SM_doMigrationWork(ctxtWrapper) {
  87.     var ctxt = ctxtWrapper.wrappedJSObject;
  88.  
  89.     var engine = ctxt.oldExcluded.shift();
  90.     var engineFilename =
  91.       engine.replace('NC:SearchCategory?engine=urn:search:engine:', '');
  92.  
  93.     var newEngine = ctxt.engineMap[engineFilename];
  94.  
  95.     if (newEngine)
  96.       ctxt.newExcluded.push(newEngine);
  97.  
  98.     return Boolean(ctxt.oldExcluded.length);
  99.   },
  100.  
  101.   getInterfaces: function SM_getInterfaces(countRef) {
  102.     var interfaces = [Ci.flockIMigratable, Ci.nsIClassInfo, Ci.nsISupports];
  103.     countRef.value = interfaces.length;
  104.     return interfaces;
  105.   },
  106.   getHelperForLanguage: function SM_getHelperForLanguage(language) {
  107.     return null;
  108.   },
  109.   contractID: SM_CONTRACTID,
  110.   classDescription: SM_CLASSNAME,
  111.   classID: SM_CLASSID,
  112.   implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT,
  113.   flags: Ci.nsIClassInfo.SINGLETON,
  114.  
  115.   QueryInterface: function SM_QueryInterface(iid) {
  116.     if (iid.equals(Ci.flockIMigratable) ||
  117.         iid.equals(Ci.nsIClassInfo) ||
  118.         iid.equals(Ci.nsISupports))
  119.       return this;
  120.     throw Cr.NS_ERROR_NO_INTERFACE;
  121.   }
  122. }
  123.  
  124.  
  125. function GenericComponentFactory(ctor) {
  126.   this._ctor = ctor;
  127. }
  128.  
  129. GenericComponentFactory.prototype = {
  130.  
  131.   _ctor: null,
  132.  
  133.   // nsIFactory
  134.   createInstance: function(outer, iid) {
  135.     if (outer != null)
  136.       throw Cr.NS_ERROR_NO_AGGREGATION;
  137.     return (new this._ctor()).QueryInterface(iid);
  138.   },
  139.  
  140.   // nsISupports
  141.   QueryInterface: function(iid) {
  142.     if (iid.equals(Ci.nsIFactory) ||
  143.         iid.equals(Ci.nsISupports))
  144.       return this;
  145.     throw Cr.NS_ERROR_NO_INTERFACE;
  146.   },
  147. };
  148.  
  149. var Module = {
  150.   QueryInterface: function(iid) {
  151.     if (iid.equals(Ci.nsIModule) ||
  152.         iid.equals(Ci.nsISupports))
  153.       return this;
  154.  
  155.     throw Cr.NS_ERROR_NO_INTERFACE;
  156.   },
  157.  
  158.   getClassObject: function(cm, cid, iid) {
  159.     if (!iid.equals(Ci.nsIFactory))
  160.       throw Cr.NS_ERROR_NOT_IMPLEMENTED;
  161.  
  162.     if (cid.equals(SM_CLASSID))
  163.       return new GenericComponentFactory(SearchMigratable)
  164.  
  165.     throw Cr.NS_ERROR_NO_INTERFACE;
  166.   },
  167.  
  168.   registerSelf: function(cm, file, location, type) {
  169.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  170.     cr.registerFactoryLocation(SM_CLASSID, SM_CLASSNAME, SM_CONTRACTID,
  171.                                file, location, type);
  172.  
  173.     var catman = Cc['@mozilla.org/categorymanager;1']
  174.       .getService(Ci.nsICategoryManager);
  175.     catman.addCategoryEntry('flockMigratable', SM_CLASSNAME, SM_CONTRACTID,
  176.                             true, true);
  177.   },
  178.  
  179.   unregisterSelf: function(cm, location, type) {
  180.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  181.     cr.unregisterFactoryLocation(SM_CLASSID, location);
  182.   },
  183.  
  184.   canUnload: function(cm) {
  185.     return true;
  186.   },
  187. };
  188.  
  189. function NSGetModule(compMgr, fileSpec)
  190. {
  191.   return Module;
  192. }
  193.